package base_grammar

import (
	"fmt"
	"strings"
)

func Function_bbf4() {
	// 闭包=函数+引用环境
	f1, f2 := cal(10)
	fmt.Println(f1(1), f2(2))
	fmt.Println(f1(3), f2(4))
	fmt.Println(f1(5), f2(6))
}

func Function_bbf3() {
	pngMake := makeSuffix(".png")
	jpgMake := makeSuffix(".jpg")
	fmt.Println(pngMake("test"))
	fmt.Println(pngMake("test.png"))
	fmt.Println(jpgMake("test"))
}

func Function_bbf2() {
	var f = add2(10)
	fmt.Println(f(10))
	fmt.Println(f(20))
	fmt.Println(f(30))
	fmt.Println("========")
	f1 := add2(10)
	fmt.Println(f1(40))
	fmt.Println(f1(50))
	fmt.Println(f1(60))
}

func Function_bbf1() {
	var f = add()
	fmt.Println(f(10))
	fmt.Println(f(20))
	fmt.Println(f(30))
	fmt.Println("========")
	f1 := add()
	fmt.Println(f1(40))
	fmt.Println(f1(50))
	fmt.Println(f1(60))
}

func add() func(y int) int {
	var x int
	return func(y int) int {
		x += y
		return x
	}
}

func add2(x int) func(y int) int {
	return func(y int) int {
		x += y
		return x
	}
}

func makeSuffix(suffix string) func(name string) string {
	return func(name string) string {
		if !strings.HasSuffix(name, suffix) {
			return name + suffix
		}
		return name
	}

}

func cal(base int) (func(int) int, func(int) int) {
	add := func(i int) int {
		base += i
		return base
	}
	sub := func(i int) int {
		base -= i
		return base
	}
	return add, sub
}
